package com.maiko.maikoaiagent.tools;

import cn.hutool.core.io.FileUtil;
import com.maiko.maikoaiagent.constant.FileConstant;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

/**
 * 文件操作工具类：用于读写本地文件
 * @author: Maiko7
 * @create: 2025-07-09 14:50
 */
public class FileOperationTool {

    // 文件保存基础目录
    private final String FILE_DIR = FileConstant.FILE_SAVE_DIR + "/file";

    /**
     * 这个@Tool干嘛的？
     * 告诉 AI 或框架：这是一个可以调用的“工具方法”
     * 类似于 Spring 中的 @Service、@RestController，这个 @Tool 注解的主要目的是 注册方法为 AI 能识别并调用的工具（Tool）。
     */
    /**
     * 从指定文件读取内容
     * @param fileName 要读取的文件名
     * @return 文件内容或错误信息
     */
    @Tool(description = "Read content from a file") // 表示该方法是一个可被 AI Agent 调用的工具方法
    public String readFile(@ToolParam(description = "Name of the file to read") String fileName) {
        // 拼接文件完整路径
        String filePath = FILE_DIR + "/" + fileName;
        try {
            // 使用 FileUtil 工具类读取文件内容并返回
            return FileUtil.readUtf8String(filePath);
        } catch (Exception e) {
            // 异常处理：返回错误信息
            return "Error reading file: " + e.getMessage();
        }
    }

    /**
     * 向指定文件写入内容
     * @param fileName 要写入的文件名
     * @param content  要写入的内容
     * @return 操作结果或错误信息
     */
    @Tool(description = "Write content to a file") // 声明该方法为一个工具，供外部系统调用（如 AI Agent）
    public String writeFile(
            @ToolParam(description = "Name of the file to write") String fileName,      // 工具方法参数，描述参数含义
            @ToolParam(description = "Content to write to the file") String content) {   // 同上
        // 拼接文件完整路径
        String filePath = FILE_DIR + "/" + fileName;
        try {
            // 确保目录存在
            FileUtil.mkdir(FILE_DIR);
            // 使用 FileUtil 工具类将内容写入文件
            FileUtil.writeUtf8String(content, filePath);
            // 返回成功信息，包含文件路径
            return "File written successfully to: " + filePath;
        } catch (Exception e) {
            // 异常处理：返回错误信息
            return "Error writing to file: " + e.getMessage();
        }
    }
}


